<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // 正常来说,一个函数调用的时候,没有写返回值的时候默认返回的是undefined
    // function fn () {}
    // let result = fn();
    // console.log(result);

    
    // 当一个函数被 async 修饰的时候,此时没有返回值,相当于默认返回的是undefined,得到的结果是一个成功的 promise
    // ------------------------------------------------------------
    // 总结:
    // 当函数被 async 修饰的时候,返回值一定是一个 promise
    // 这个promise的成功和失败由什么决定?
    // 这个promise的成功和失败由 return 的内容决定
    // 1. return一个非promise数据的时候,async函数的promise是成功的
    //      例如: return undefined
    //            return 125
    //            return 'abc'
    //            return []
    //            return {}
    // 2. return一个promise值得时候,此时async函数的promsie由 return 的 prosmie 状态来确定
    //      return 一个pending状态的promise ,那么此时 async 函数返回的 prosmie 也是pending状态
    //      return 一个成功的 prosmie,       那么此时 async 函数返回的 promise 也是成功的
    //      return 一个失败的 promise,       那么此时 async 函数返回的 promsie 也是失败的
    //      例如: return new Promise(() => {})
    //            return Promise.resolve(11)
    //            return Promise.reject(22)
    // 3. async 函数中抛出错的时候,此时当前这个async函数返回的promise状态是失败的

    // async function fn () {
    //   // return {}

    //   // return new Promise(() => {}) // promise是pending状态
    //   // return Promise.resolve(11) // return 一个成功的promise
    //   // return Promise.reject(22) // return一个失败的promise

    //   throw 130 // 抛错
    // }

    // let result = fn();

    // console.log(result);



    // -------------------------------------------------------

    // await 不能单独使用,必须出现在 async 函数中
    // await 后面可以跟什么值?
    // 1. await 后面可以跟一个非promise值,得到的结果就是这个非promise值
    // 2. await 后面跟promise值得结果如下
    //      当 await 跟一个 pending 状态的promise,await 在等待这个promise出结果,后续的代码不会执行
    //      当 await 跟一个 成功    状态的promise,得到的是这个成功状态的promise中的值
    //      当 await 跟一个 失败    状态的promise,此时报错,await是接收不到失败promise的

    async function fn () {

      // let result = await [];

      
      // let result = await new Promise(() => {}); // 跟pending状态的peomise
      // let result = await Promise.resolve('150'); // 跟成功状态的promise
      let result = await Promise.reject('180'); // 跟失败状态的promise

      console.log(result);

    }

    fn();


  </script>
</body>
</html>